package com.fdd.furns.pojo;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Set;

public class Cart {
    public HashMap<Integer, CartItem> items = new HashMap<>();
    //购物车商品总数
    private Integer totalCount;


    //添加家居项目到购物车
    public void addItem(CartItem cartItem) {
        CartItem item = items.get(cartItem.getId());
        if (item == null) {
            //cartItem 是第一次添加
            items.put(cartItem.getId(), cartItem);
        } else {
            //cartItem 已经存在，数量累加
            item.setCount(item.getCount() + 1);
            item.setTotalPrice(new BigDecimal(item.getPrice().doubleValue() * item.getCount()));
        }
    }

    //获取购物车商品总数
    public int getTotalCount() {
        //这里一定要清零，因为每次调用这个方法，都会重新计算totalCount
        //如果不清零，那么totalCount就会一直累加
        totalCount = 0;
        for (CartItem item : items.values()) {
            totalCount += item.getCount();
        }
        return totalCount;
    }

    //获取购物车总价
    public BigDecimal getTotalPrice() {
        BigDecimal totalPrice = new BigDecimal(0);
        Set<Integer> keys = items.keySet();
        for (Integer key : keys) {
            //add之后一定要把totalPrice赋值给totalPrice，否则totalPrice不会变化
           totalPrice = totalPrice.add(items.get(key).getTotalPrice());
        }
        return totalPrice;
    }
    //获取购物车某个家居项的数量
    public int getItemCount(int id) {
        CartItem item = items.get(id);
        if (item!= null) {
            return item.getCount();
        }
        return 0;
    }

    //修改购物车的家居项
    public void updateItem(int id, int count) {
        CartItem item = items.get(id);
        if (item != null) {
            //先更新数量
            item.setCount(count);
            //再更新总价
            item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));
        }
    }
    //删除家居项
    public void deleteItem(int id) {
        items.remove(id);
    }

    //清空购物车
    public void clear() {
        items.clear();
    }


    public HashMap<Integer, CartItem> getItems() {
        return items;
    }


    //重写toString方法，方便调试
    @Override
    public String toString() {
        return "Cart{" +
                "items=" + items +
                '}';
    }
}
